package filtres;
 
import beans.Utilisateur;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
public class FiltreMembre implements Filter {
    public static final String ACCES_CONNEXION  = "/connexion";
    public static final String ACCES_DECONNEXION  = "/deconnexion";
    public static final String ATT_BUG         = "bug";
    public static final String ATT_SESSION_USER = "sessionUtilisateur";
    public List<String> UrlSecretaire;
    public List<String> UrlEtudiant;
    public List<String> UrlProfesseur;

    @Override
    public void init( FilterConfig config ) throws ServletException {
        UrlSecretaire = new ArrayList<String>();
        UrlSecretaire.add("/inscription");
        UrlSecretaire.add("/creerMatiere");
        UrlSecretaire.add("/creerPromotion");
        UrlSecretaire.add("/affecterMatiereProf");
        UrlSecretaire.add("/affecterPromotion");
        UrlSecretaire.add("/affecterMatiere");
        UrlSecretaire.add("/index.jsp");
        UrlSecretaire.add("/connexion");
        UrlSecretaire.add("/deconnexion");
        
        UrlProfesseur = new ArrayList<String>();
        UrlProfesseur.add("/ajouterExamen");
        UrlProfesseur.add("/affecterPromotion");
        UrlProfesseur.add("/affecterMatiere");
        UrlProfesseur.add("/index.jsp");
        UrlProfesseur.add("/connexion");
        UrlProfesseur.add("/deconnexion");
        UrlProfesseur.add("/saisirNote");
        
        UrlEtudiant = new ArrayList<String>();
        UrlEtudiant.add("/index.jsp");
        UrlEtudiant.add("/connexion");
        UrlEtudiant.add("/deconnexion");
    }
 
    @Override
    public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException,
            ServletException {
        /* Cast des objets request et response */
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
 
        /* Récupération de la session depuis la requête */
        HttpSession session = request.getSession();
        
        Utilisateur utilisateur  = (Utilisateur) session.getAttribute(ATT_SESSION_USER);
 
        String chemin = request.getRequestURI().substring( request.getContextPath().length() );
        
        if ( chemin.startsWith( "/CSS" ) ) {
            chain.doFilter( request, response );
            return;
        }
        
        if ( utilisateur == null ) {
            /* Redirection vers la page publique */
            request.setAttribute( ATT_BUG, "Vous devez vous authentifier.");
            request.getRequestDispatcher( ACCES_CONNEXION ).forward( request, response );
        } 
        else {
            switch (utilisateur.getType()){
                case 2:
                    if (!UrlSecretaire.contains(chemin)) {
                        request.setAttribute( ATT_BUG, "Vous ne disposez pas des droits nécessaires pour consulter cette page.");
                        request.getRequestDispatcher( "index.jsp" ).forward( request, response );
                        return;
                    }
                    break;
                case 1:
                    if (!UrlProfesseur.contains(chemin)) {
                        request.setAttribute( ATT_BUG, "Vous ne disposez pas des droits nécessaires pour consulter cette page.");
                        request.getRequestDispatcher( "index.jsp" ).forward( request, response );
                        return;
                    }
                    break;
                default:
                    if (!UrlEtudiant.contains(chemin)) {
                        request.setAttribute( ATT_BUG, "Vous ne disposez pas des droits nécessaires pour consulter cette page.");
                        request.getRequestDispatcher( "index.jsp" ).forward( request, response );
                        return;
                    }
                    break;
            }
            chain.doFilter( request, response );
        }
    }
 
 
    @Override
    public void destroy() {
    }
}